Appearance
계정 삭제 (Delete My Account) — Supabase 연동
마이페이지 계정 보안 영역의 계정 삭제 버튼이 Supabase Auth와 연동되도록 구현한 내용입니다.
1. 동작 요약
| 대상 | 동작 |
|---|---|
관리자 (super_admin) | 버튼 비활성화. 문구: "관리자는 계정을 삭제할 수 없습니다." |
| 그 외 사용자 | 확인 다이얼로그 후 Supabase Edge Function delete-my-account 호출 → 계정 삭제 → 로그아웃 후 홈으로 이동 |
2. 프론트엔드 (web-ui)
- MyInfoPage.vue
auth.user?.role === 'super_admin'이면 삭제 버튼disabled, 설명 문구를deleteAccountSuperAdminNote로 표시(관리자 계정 삭제 불가).- 그 외: 버튼 클릭 시
window.confirm(deleteAccountConfirm)후supabase.functions.invoke('delete-my-account', { method: 'POST', body: {} })호출. - 성공 시 토스트 →
auth.logout()→router.push('/').
- i18n
deleteAccountSuperAdminNote,deleteAccountConfirm,deleteAccountSuccess,deleteAccountError(ko/en) 추가.
3. Edge Function 배포 (필수)
계정 삭제는 Supabase Admin API가 필요하므로, 클라이언트에서 직접 삭제할 수 없습니다.
Supabase Edge Function delete-my-account를 배포해야 합니다.
3-1. 함수 위치
supabase/functions/delete-my-account/index.ts
3-2. 배포 방법
- Supabase CLI 설치 후 로그인:bash
npx supabase login - 프로젝트 연결 후 함수 배포:bash
npx supabase link --project-ref <프로젝트_REF> npx supabase functions deploy delete-my-account - Supabase 대시보드에서 Edge Functions 메뉴에
delete-my-account가 보이면 배포 완료.
3-3. 함수 동작
- 요청의 Authorization: Bearer <JWT> 로 현재 사용자 확인.
- 해당 사용자 ID에 대해 Admin API
auth.admin.deleteUser(userId)호출. - 성공 시
{ success: true }반환. 실패 시{ error: "메시지" }및 적절한 HTTP 상태 코드.
4. 관련 문서
- 01. supabase-setup.md) — 프로젝트 생성, URL/API 키
- Supabase Edge Functions: https://supabase.com/docs/guides/functions